package com.ftg.learn.chapter09.reflech.demo01;

import java.lang.reflect.Field;
import java.util.Arrays;

/**
 * @author kangjx
 * @createTime 2023/1/11
 */
public class DemoPlay {

    public static void main(String[] args) {
//        Human h1 = new Human();
//        类地址 ，指的是类所在包的完整路径
        String path = "com.ftg.learn.chapter09.reflech.demo01.Human";
        //异常

        //反射  : Class
        try{
            //就是反射
            Class c = Class.forName(path);

//            C是引用 Class的引用 -> 指向了 Human类代理

            //getName() c的引用指向的类的 地址

            //字段 field 属性 property
            //Field这个类实例指的就是Class引s用所指向的类 Human 里面的所有属性
            Field[] fs = c.getDeclaredFields();
            System.out.println(Arrays.toString(fs));

            //通过反射创建一个对象的实例
            Object obj = c.newInstance();

            for (int i = 0; i < fs.length; i++) {
                System.out.println(fs[i].getName()+"字段名");
                System.out.println(fs[i].getType()+"字段类型");



                //字段 能独立存在.
                //设置 当前字段是否可见性 true可见  false不可见
                fs[i].setAccessible(true);

                if(fs[i].getType().getName().contains("String")){
                    fs[i].set(obj,"sss");
                }else if(fs[i].getType().getName().contains("int")){
                    fs[i].set(obj,123);
                }

                Object str = fs[i].get(obj);

                System.out.println(str);

            }

        }catch (ClassNotFoundException | InstantiationException | IllegalAccessException cnfe){
            cnfe.printStackTrace();
        }

    }

}
